home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1035 / 1035.xpi / chrome / 1clickweather.jar / content / 1clickweather / js / network.js < prev    next >
Text File  |  2008-10-05  |  3KB  |  116 lines

  1. /*
  2.    The XMLRequest object can handle blocking and nonblocking calls.
  3.    If the setParser method is called, it will turn the object into a nonblocking object.
  4.    The setParser call requires the object that is passed into the method to have 2 methods:
  5.       parseFunc();
  6.       parseError();
  7.    
  8.    Basic usage:
  9.  
  10.          xmlRequest = new XMLRequest(url);
  11.          xmlRequest.setParser(parserObject);
  12.          xmlRequest.Get();
  13.  
  14. */
  15.  
  16. function XMLRequest(url){
  17.    this.url = url;
  18.  
  19.    this.xmlDoc = null;
  20.    var parseObj;
  21.    var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
  22.    request.timeout = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
  23.  
  24.    DumperTagProperties["OPTION"] = ['text','value','defaultSelected'];
  25.  
  26.    this.setParser = function(TparseObj){
  27.       parseObj = TparseObj;
  28.    }
  29.  
  30.    this.Get = function(){
  31.       if(this.url){
  32.          if(!parseObj){
  33.             this.xmlDoc = this.Blocking();
  34.          }else{
  35.             this.NonBlocking();
  36.          }
  37.       }else{
  38.          return(false);
  39.       }
  40.    }
  41.  
  42.    this.Blocking = function(){
  43.       if(this.url){
  44.          try{
  45.             request.overrideMimeType('text/xml');
  46.             request.open('GET', this.url, false);
  47.             request.send(null);
  48.             if(request.status == 200){
  49.                return(request.responseXML);
  50.             }
  51.          }
  52.  
  53.          // we catch any errors to make sure we don't fill the javascript console with junk
  54.          catch(e){
  55.               return(null);
  56.          }
  57.       }
  58.       return(null);
  59.    }
  60.  
  61.    this.NonBlocking = function(){
  62.       if(this.url && parseObj){
  63.          request.overrideMimeType('text/xml');
  64.          request.open('GET', this.url, true);
  65.          
  66.          // we attach an anonymous function to the onreadystatechange method of the request.
  67.          // when state changes, this function gets called
  68.          request.onreadystatechange = this.AsyncCall;
  69.  
  70.          // now that we have created the request, actually send it
  71.          request.send(null);
  72.          return(false);
  73.       }else{
  74.          return(false);
  75.       }
  76.    }
  77.  
  78.  
  79.    this.AsyncCall = function(){
  80.       var reqState = request.readyState;
  81.  
  82.       try{
  83.          switch(reqState){
  84.             // once we get to a state '4', we have finished the request so we move on
  85.             case 4:
  86.                if(request.status == 200){
  87. //alert(request.responseText);
  88.                   parseObj.parseFunc(request.responseXML);
  89.                   return(true);
  90.                }else{
  91.                   parseObj.parseError(request.status);
  92.                   return(false);
  93.                }
  94.                break;
  95.  
  96.             // if we manage to get a '2' for state, make sure there is a status number for the request.
  97.             // if we didn't get anything for the status, we have an error
  98.             case 2:
  99.                if(!request.status){
  100.                   parseObj.parseError(request.status);
  101.                   return(false);
  102.                }
  103.                break;
  104.  
  105.             default:
  106.                // the catch all
  107.          }
  108.       }
  109.       catch(e){
  110.          parseObj.parseError(0);
  111.          return(false);
  112.       }
  113.    }
  114. }
  115.  
  116.